<?php

class Exts_Db_Table_RestrictedAccessTable  extends Exts_Db_Table_AuditableTable {
	protected $_rowClass = 'Exts_Db_Table_Row_RestrictedAccessRow';
	
	
	/*
	 * El acceso a datos sin autorización es evitado silenciosamente. 
	 * Para el usuario no existe ningun dato al que no tenga el acceso permitido, 
	 * pero le esta permitido preguntar por el.
	 * */
	
	public function fetchAll($where = null, $order = null, $count = null, $offset = null){
		$rowset = parent::fetchAll($where, $order, $count, $offset);
		$user = $this->getCurrentUser();
		if ($user) {
			$closure = new Exts_Closures_BooleanClosure('$row', ' return $user->canView($row); ');
			$closure->user = $user;
			
			return $rowset->select($closure);
		}
		return $rowset;
	}
	
	public function fetchRow($where = null, $order = null) {
		$row = parent::fetchRow($where, $order);
		if (!$row) return $row;
		$user = $this->getCurrentUser();
		if ($user) {
			if ($user->canView($row)) {
				return $row;	
			}
			else {
				return false;
			}
		}
		return $row;
	}
	
	
	
}